package app.musicPlayer.domain;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.ListActivity;
import android.app.PendingIntent;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
import app.persistencia.CancionLista;
import app.persistencia.ListaDeReproduccion;
import app.persistencia.ListasDeReproduccion;
import app.utils.Utiles;

public class AllSongs extends ListActivity {
	
	CancionLista cancionSelecionada;
	ArrayAdapter<CancionLista> adapter;
	ArrayList<CancionLista> arrayCanciones;
	boolean socialMusicPlayer;
	static final int DEFAULT = -1;
	static final int ALBUMS = 0;
	static final int ARTISTAS = 1;
	int dondeIr;
	
	public void onCreate(Bundle icicle) {
		super.onCreate(icicle);
		//socialMusicPlayer = false;
		Bundle bundle = getIntent().getExtras();
        String[] values = new String[1];
        Integer selected = Integer.valueOf(bundle.getString(Utiles.FACTORDESELECCION));
        arrayCanciones = new ArrayList<CancionLista>();
		arrayCanciones.addAll(CancionesSistema.getIntances().getTodasLasCanciones());
		switch (selected) {
		case Utiles.SELECT_FROM_ARTIST:
			String artist = bundle.getString(Utiles.VALOR);
			ArrayList<CancionLista> arrayCancionesArtista = new ArrayList<CancionLista>();
			for(int i = 0; i < arrayCanciones.size(); i++){
				if(arrayCanciones.get(i).getArtist().equals(artist))
					arrayCancionesArtista.add(arrayCanciones.get(i));
			}
			arrayCanciones.clear();
			arrayCanciones.addAll(arrayCancionesArtista);
			adapter = new InteractiveArrayAdapterListaReproduccion
					(this,arrayCancionesArtista);
			dondeIr = ARTISTAS;

			break;
		case Utiles.SELECT_FROM_ALBUM:
			String album = bundle.getString(Utiles.VALOR);
			ArrayList<CancionLista> arrayCancionesAlbum = new ArrayList<CancionLista>();
			for(int i = 0; i < arrayCanciones.size(); i++){
				if(arrayCanciones.get(i).getAlbum().equals(album))
					arrayCancionesAlbum.add(arrayCanciones.get(i));
			}
			arrayCanciones.clear();
			arrayCanciones.addAll(arrayCancionesAlbum);
			adapter = new InteractiveArrayAdapterListaReproduccion
					(this,arrayCancionesAlbum);
			dondeIr = ALBUMS;
			break;
		default:
			adapter = new InteractiveArrayAdapterListaReproduccion
				(this,arrayCanciones);
				dondeIr= DEFAULT;
			break;
		}
		// Create an array of Strings, that will be put to our ListActivity
		setListAdapter(adapter);
		final ListView listsview = getListView();
		listsview.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View v, int posicion, long id) {
            	cancionSelecionada = arrayCanciones.get(posicion);
            	goReproducir();
            }
        });
		listsview.setLongClickable(true);
	        listsview.setOnItemLongClickListener(new OnItemLongClickListener() {
	            public boolean onItemLongClick(AdapterView<?> parent, View v, int posicion, long id) {
	            	cancionSelecionada = arrayCanciones.get(posicion);
           			registerForContextMenu(listsview);
					return false;
	        }
        });
	}

	@Override  
	public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {  
    	super.onCreateContextMenu(menu, v, menuInfo);
		menu.setHeaderTitle("Menu Lista");
		menu.add(0, v.getId(), 0, "A�adir a una lista");
		menu.add(0, v.getId(), 0, "Editar");  
		menu.add(0, v.getId(), 0, "Reproducir");		
	}
	 @Override  
		public boolean onContextItemSelected(MenuItem item) {  
	    	if(item.getTitle().equals("Editar")){
	    		goEditar();
	    	}  
	    	else if(item.getTitle().equals("Reproducir")){
	    		goReproducir();
	    	}
	    	else if(item.getTitle().equals("A�adir a una lista")){
	    		anadirCancionesALista();
	    	}
	    	else {return false;}  
	    	return true;  
	    }

	private void goReproducir() {
		ArrayList<CancionLista>una = new ArrayList<CancionLista>();
		una.add(cancionSelecionada);
		ReproduccionActual rp = ReproduccionActual.getIntances();
		rp.assignNewSongsList(una);
		
	 	Intent intent = new Intent(AllSongs.this, Mp3player.class);
 		finish();
    	startActivity(intent);
		//finish();
    	//finish();
	 	/*if(rp.isReproductorEnMarcha()) {
		 	Intent intent = new Intent(AllSongs.this, Mp3player.class);
	    	finish();
	    	startActivity(intent);
	 	/*}
	 	else {
	 		rp.setReproductorEnMarcha(true);
		 	final Intent notificationIntent = new Intent(AllSongs.this, Mp3player.class);
	        notificationIntent.setAction(Intent.ACTION_MAIN);
	        notificationIntent.addCategory(Intent.CATEGORY_LAUNCHER);
	        PendingIntent contentIntent = 
	        		PendingIntent.getActivity(this, 0, notificationIntent, 0);
	
	    	startActivity(notificationIntent);
	 	}*/
	}

	private void borrar() {
		Utiles.showMessage(AllSongs.this, "Proximamente");
	}

	private void goEditar() {
		Utiles.showMessage(AllSongs.this, "Proximamente");
	}
	public boolean onKeyDown(int keyCode, KeyEvent event) {
	    if (keyCode == KeyEvent.KEYCODE_BACK) {
	    	//moveTaskToBack(true);  
	    	Intent intent;
	    	finish();
    		switch(dondeIr) {
    		case DEFAULT:
    			returnToViewMain(null);
    			break;
    		case ARTISTAS:
    	    	intent = new Intent(AllSongs.this, 
    	    							SelectFromArtist.class);
    	    	finish();
    	    	startActivity(intent);
    			break;
    		case ALBUMS:
    			intent = new Intent(AllSongs.this, 
    									SelectFromAlbum.class);
    			finish();
    			startActivity(intent);
    			break;
    		}
    		
	    	return true;
	    }
	    return super.onKeyDown(keyCode, event);
	}
	private void returnToViewMain(Object object) {
    	Intent intent = new Intent(AllSongs.this, SocialMusicPlayerActivity.class);
    	finish();
    	startActivity(intent);
	}
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
	    MenuInflater inflater = getMenuInflater();
	    inflater.inflate(R.menu.viewsongsmenu2, menu);
	    return true;
	}
	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
	    switch (item.getItemId()) {
	        case R.id.reproducir:
	            reproducirTodas();
	            return true;
	        case R.id.Seleccion:
	        	seleccion();
	        	return true;
	        case R.id.Volver :
	        	returnToViewMain(null);
	        	return true;
	       default :
	            return super.onOptionsItemSelected(item);
	    }
	}

	private void seleccion() {
		Utiles.showMessage(AllSongs.this, "Proximamente");
	}
	private void reproducirTodas() {
		ReproduccionActual rp = ReproduccionActual.getIntances();
		rp.assignNewSongsList(arrayCanciones);

	 	
	 	//if(rp.isReproductorEnMarcha()) {
	 	Intent intent = new Intent(AllSongs.this, Mp3player.class);
	 	finish();
    	startActivity(intent);
	 	/*}
	 	else {
	 		rp.setReproductorEnMarcha(true);
		 	final Intent notificationIntent = new Intent(AllSongs.this, Mp3player.class);
	        notificationIntent.setAction(Intent.ACTION_MAIN);
	        notificationIntent.addCategory(Intent.CATEGORY_LAUNCHER);
	        PendingIntent contentIntent = 
	        		PendingIntent.getActivity(this, 0, notificationIntent, 0);
	
	    	startActivity(notificationIntent);
	 	}*/
	}

	private void anadirCancionesALista() {
		final ArrayList<ListaDeReproduccion> li =
				ListasDeReproduccion.getIntances().getList();
		String[] items = new String[li.size()];
		for(int i= 0; i < li.size(); i++)
			items[i]=li.get(i).getName();
		  
		    AlertDialog.Builder builder = new AlertDialog.Builder(this);
		 
		    builder.setTitle("Selecci�n");
		    builder.setItems(items, new DialogInterface.OnClickListener() {
		        public void onClick(DialogInterface dialog, int item) {
		            boolean b =ListasDeReproduccion.getIntances().addSong(AllSongs.this,
		            		li.get(item).getId(), cancionSelecionada.getPath());
		            if(b)
		            	Utiles.showMessage(AllSongs.this, "Cancion a�adida a "+
		            		li.get(item).getName()+" con exit.");
		            else
		            	Utiles.showMessage(AllSongs.this, "Cancion no a�adida");
		        }
		    });
		    builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
	 	    	public void onClick(DialogInterface dialog, int which) {
	 	    		
	 	    	} 
	    	});
		    builder.show();
		
	}
	

}
